package com.ruoyi.mapper;

import com.ruoyi.entity.JrFile;
import com.ruoyi.entity.JrSecuritys;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FilesMapper {
    // 根据ID查询文件
    JrFile selectFileById(@Param("fileId") Long fileId);
    // 重命名文件
    int renameFile(@Param("fileId") Long fileId, @Param("newName") String newName);

    // 检查同一文件夹下是否存在同名文件（排除自身）
    int existsSameNameInFolder(@Param("folderId") Long folderId, @Param("fileName") String fileName, @Param("excludeFileId") Long excludeFileId);

    /* 1. 根据文件夹id列表批量更新文件的is_delete状态
       2. 根据文件id更新文件的is_delete状态*/
    int deleteFileByIds(@Param("ids") List<Long> ids);
    int deleteFilesByFolderIds(@Param("folderIds") List<Long> folderIds);

    // 根据用户安全级别选择允许的文件
    List<JrFile> selectPermittedFilesByUserSecurity(@Param("security")int security);

    // 根据文件夹ID和用户安全级别查询被允许的文件列表
    List<JrFile> selectPermittedFilesByFolderIds(@Param("folderIds") List<Long> folderIds, @Param("userSecurity") Integer userSecurity);

    // 查询所有文件
    List<JrFile> selectAllFiles();

    /**
     * 根据用户密级过滤文件上传密级下拉框
     * @param userId
     * @return
     */
    List<JrSecuritys> selectFilesByUserSecurity(Long userId);


    /**
     * 根据id获取文件信息
     * @param fileId
     * @return
     */
    JrFile selectById(Long fileId);

    /**
     * 批量删除
     * @param ids id
     * @return
     */
    int batchDelete(@Param("ids") List<Long> ids);

    /**
     * 根据文件夹id和文件名查询文件是否存在
     * @param folderId
     * @param name
     * @return
     */
    List<JrFile> selectByFolderIdAndName(
            @Param("folderId") Long folderId,
            @Param("name") String name);

    /**
     * 新增文件
     * @param file
     * @return
     */
    int insertFile(JrFile file);

    /**
     * 根据id更新文件
     * @param file
     * @return
     */
    int updateById(JrFile file);
}
